package problems.daily.y2021m7;

/**
 * @author habitplus
 * @since 2021-07-15 09:41
 */
public class T20210715N2 {
    // 557. 反转字符串中的单词 III
    // 给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
    //
    // 提示：
    //      在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
    //
    // 链接：https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/
    public String reverseWords(String s) {
        if (s == null || s.length() == 0) {
            return "";
        }

        char[] chs = s.toCharArray();
        int j = -1;

        for (int i = 0; i <= chs.length; i++) {
            if (i == chs.length || chs[i] == ' ') {
                // 获得一个单词
                reverse(chs, j + 1, i - 1);
                j = i;
            }
        }

        return new String(chs);
    }

    private void reverse(char[] chs, int i, int j) {
        char c;
        while (i < j) {
            c = chs[i];
            chs[i++] = chs[j];
            chs[j--] = c;
        }
    }
}
